home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 1 / ETO Development Tools 1.iso / Essentials / Developer Essentials Jul 90 / Programming / MPW Interfaces & Libraries 3.1 / CIncludes / Script.h < prev    next >
Encoding:
C/C++ Source or Header  |  1989-10-13  |  26.2 KB  |  879 lines  |  [TEXT/MPS ]

  1. /************************************************************
  2.  
  3. Created: Tuesday, September 12, 1989 at 6:35 PM
  4.     Script.h
  5.     C Interface to the Macintosh Libraries
  6.  
  7.  
  8.     Copyright Apple Computer, Inc.    1986-1989
  9.     All rights reserved
  10.  
  11. ************************************************************/
  12.  
  13.  
  14. #ifndef __SCRIPT__
  15. #define __SCRIPT__
  16.  
  17. #ifndef __TYPES__
  18. #include <Types.h>
  19. #endif
  20.  
  21. #ifndef __PACKAGES__
  22. #include <Packages.h>
  23. #endif
  24.  
  25.  
  26. /* Note that the version number is divided into two bytes:    The high byte is
  27. bumped when the changes make the next version incompatible with previous
  28. versions.  If compatability is maintained, the low byte is bumped. The low
  29. byte is maintained privately by the Script Manager, and is shown as 0 here. */
  30.  
  31. #define smgrVers 0x0200             /*current version number.*/
  32.  
  33. /* Script Interface System Numbers */
  34.  
  35. #define smRoman 0                    /*Font script is Roman.*/
  36. #define smJapanese 1                /*Font script is Japanese.*/
  37. #define smChinese 2                 /*Font script is Chinese.*/
  38. #define smKorean 3                    /*Font script is Korean.*/
  39. #define smArabic 4                    /*Font script is Arabic.*/
  40. #define smHebrew 5                    /*Font script is Hebrew.*/
  41. #define smGreek 6                    /*Font script is Greek.*/
  42. #define smRussian 7                 /*Font script is Russian.*/
  43. #define smRSymbol 8                 /*Font script is Right-left symbol.*/
  44. #define smDevanagari 9                /*Font script is Devanagari.*/
  45. #define smGurmukhi 10                /*Font script is Gurmukhi.*/
  46. #define smGujarati 11                /*Font script is Gujarati.*/
  47. #define smOriya 12                    /*Font script is Oriya.*/
  48. #define smBengali 13                /*Font script is Bengali.*/
  49. #define smTamil 14                    /*Font script is Tamil.*/
  50. #define smTelugu 15                 /*Font script is Telugu.*/
  51. #define smKannada 16                /*Font script is Kannada.*/
  52. #define smMalayalam 17                /*Font script is Malayalam.*/
  53. #define smSinhalese 18                /*Font script is Sinhalese.*/
  54. #define smBurmese 19                /*Font script is Burmese.*/
  55. #define smKhmer 20                    /*Font script is Khmer.*/
  56. #define smThai 21                    /*Font script is Thai.*/
  57. #define smLaotian 22                /*Font script is Laotian.*/
  58. #define smGeorgian 23                /*Font script is Georgian.*/
  59. #define smArmenian 24                /*Font script is Armenian.*/
  60. #define smMaldivian 25                /*Font script is Maldivian.*/
  61. #define smTibetan 26                /*Font script is Tibetan.*/
  62. #define smMongolian 27                /*Font script is Mongolian.*/
  63. #define smAmharic 28                /*Font script is Amharic.*/
  64. #define smGeez 28                    /*Font script is Amharic.*/
  65. #define smSlavic 29                 /*Font script is Slavic.*/
  66. #define smVietnamese 30             /*Font script is Vietnamese.*/
  67. #define smSindhi 31                 /*Font script is Sindhi.*/
  68. #define smUninterp 32                /*Font script is uninterpreted symbols.*/
  69.  
  70. /* Language Codes */
  71.  
  72. #define langEnglish 0
  73. #define langFrench 1
  74. #define langGerman 2
  75. #define langItalian 3
  76. #define langDutch 4
  77. #define langSwedish 5
  78. #define langSpanish 6
  79. #define langDanish 7
  80. #define langPortugese 8
  81. #define langNorwegian 9
  82. #define langHebrew 10
  83. #define langJapanese 11
  84. #define langArabic 12
  85. #define langFinnish 13
  86. #define langGreek 14
  87. #define langIcelandic 15
  88. #define langMalta 16
  89. #define langTurkish 17
  90. #define langYugoslavian 18
  91. #define langChinese 19
  92. #define langUrdu 20
  93. #define langHindi 21
  94. #define langThai 22
  95.  
  96. /* Calendar Codes */
  97.  
  98. #define calGregorian 0
  99. #define calArabicCivil 1
  100. #define calArabicLunar 2
  101. #define calJapanese 3
  102. #define calJewish 4
  103. #define calCoptic 5
  104.  
  105. /* Integer Format Codes */
  106.  
  107. #define intWestern 0
  108. #define intArabic 1
  109. #define intRoman 2
  110. #define intJapanese 3
  111. #define intEuropean 4
  112. #define intOutputMask 0x8000
  113.  
  114. /* CharByte byte types */
  115.  
  116. #define smSingleByte 0
  117. #define smFirstByte -1
  118. #define smLastByte 1
  119. #define smMiddleByte 2
  120.  
  121. /* CharType field masks */
  122.  
  123. #define smcTypeMask 0x000F
  124. #define smcReserved 0x00F0
  125. #define smcClassMask 0x0F00
  126. #define smcReserved12 0x1000
  127. #define smcRightMask 0x2000
  128. #define smcUpperMask 0x4000
  129. #define smcDoubleMask 0x8000
  130.  
  131. /* CharType character types */
  132.  
  133. #define smCharPunct 0
  134. #define smCharAscii 1
  135. #define smCharEuro 7
  136.  
  137. /* additional CharType character types for FIS character sets */
  138.  
  139. #define smCharFISKana 2             /*Katakana*/
  140. #define smCharFISGana 3             /*Hiragana*/
  141. #define smCharFISIdeo 4             /*Hanzi, Kanji, Hanja*/
  142. #define smCharFISGreek 5            /*Greek (2-byte)*/
  143. #define smCharFISRussian 6            /*Russian/Cyrillic (2-byte)*/
  144. #define smCharFISHangul 8            /*Hangul (**tentative**)*/
  145.  
  146. /* CharType classes (smCharPunct sub-types) */
  147.  
  148. #define smPunctNormal 0x0000
  149. #define smPunctNumber 0x0100
  150. #define smPunctSymbol 0x0200
  151. #define smPunctBlank 0x0300
  152.  
  153. /* additional CharType classes for FIS (smCharFISIdeo sub-types) */
  154.  
  155. #define smFISClassLvl1 0x0000        /*level 1 char*/
  156. #define smFISClassLvl2 0x0100        /*level 2 char*/
  157. #define smFISClassUser 0x0200        /*user char*/
  158.  
  159. /* CharType directions */
  160.  
  161. #define smCharLeft 0x0000
  162. #define smCharRight 0x2000
  163.  
  164. /* CharType case modifers */
  165.  
  166. #define smCharLower 0x0000
  167. #define smCharUpper 0x4000
  168.  
  169. /* CharType character size modifiers (1 or multiple bytes). */
  170.  
  171. #define smChar1byte 0x0000
  172. #define smChar2byte 0x8000
  173.  
  174. /* Char2Pixel directions */
  175.  
  176. #define smLeftCaret 0                /*Place caret for left block.*/
  177. #define smRightCaret -1             /*Place caret for right block.*/
  178. #define smHilite 1                    /*Direction is TESysJust.*/
  179.  
  180. /* Transliterate target types */
  181.  
  182. #define smTransAscii 0
  183. #define smTransNative 1
  184. #define smTransCase 0xFE
  185. #define smTransSystem 0xFF            /*convert to system script*/
  186.  
  187. /* Transliterate target types for FIS */
  188.  
  189. #define smTransAscii1 2             /*1-byte Roman*/
  190. #define smTransAscii2 3             /*2-byte Roman*/
  191. #define smTransKana1 4                /*1-byte Katakana*/
  192. #define smTransKana2 5                /*2-byte Katakana*/
  193. #define smTransGana2 7                /*2-byte Hiragana (no 1-byte Hiragana)*/
  194.  
  195. /* Transliterate target modifiers */
  196.  
  197. #define smTransLower 0x4000
  198. #define smTransUpper 0x8000
  199.  
  200. /* Transliterate source mask - general */
  201.  
  202. #define smMaskAll 0xFFFFFFFF        /*Convert all text*/
  203.  
  204. /* Transliterate source masks */
  205.  
  206. #define smMaskAscii 0x00000001        /*2^smTransAscii*/
  207. #define smMaskNative 0x00000002     /*2^smTransNative*/
  208.  
  209. /* Transliterate source masks for FIS */
  210.  
  211. #define smMaskAscii1 0x00000004     /*2^smTransAscii1*/
  212. #define smMaskAscii2 0x00000008     /*2^smTransAscii2*/
  213. #define smMaskKana1 0x00000010        /*2^smTransKana1*/
  214. #define smMaskKana2 0x00000020        /*2^smTransKana2*/
  215. #define smMaskGana2 0x00000080        /*2^smTransGana2*/
  216.  
  217. /* Result values from GetEnvirons, SetEnvirons, GetScript and SetScript calls. */
  218.  
  219. #define smNotInstalled 0            /*routine not available in script*/
  220. #define smBadVerb -1                /*Bad verb passed to a routine.*/
  221. #define smBadScript -2                /*Bad script code passed to a routine.*/
  222.  
  223. /* GetEnvirons and SetEnvirons verbs */
  224.  
  225. #define smVersion 0                 /*Environment version number.*/
  226. #define smMunged 2                    /*Globals change count.*/
  227. #define smEnabled 4                 /*Environment enabled flag.*/
  228. #define smBidirect 6                /*At least on bidirect script.*/
  229. #define smFontForce 8                /*Force font flag.*/
  230. #define smIntlForce 10                /*Force intl flag.*/
  231. #define smForced 12                 /*script forced to system script.*/
  232. #define smDefault 14                /*script defaulted to Roman script.*/
  233. #define smPrint 16                    /*Printer action routine.*/
  234. #define smSysScript 18                /*System script.*/
  235. #define smLastScript 20             /*Last keyboard script.*/
  236. #define smKeyScript 22                /*Keyboard script.*/
  237. #define smSysRef 24                 /*System folder refNum.*/
  238. #define smKeyCache 26                /*Keyboard table cache pointer.*/
  239. #define smKeySwap 28                /*Swapping table pointer.*/
  240. #define smGenFlags 30                /*General flags long*/
  241. #define smOverride 32                /*Script override flags.*/
  242. #define smCharPortion 34            /*Ch vs SpExtra proportion*/
  243. #define smLastEVerb smCharPortion    /*Last environment verb.*/
  244.  
  245. /* GetScript and SetScript verbs.
  246. Note: Verbs private to script systems are negative, while
  247. those general across script systems are non-negative. */
  248.  
  249. #define smScriptVersion 0            /*Script software version.*/
  250. #define smScriptMunged 2            /*Script entry changed count.*/
  251. #define smScriptEnabled 4            /*Script enabled flag.*/
  252. #define smScriptRight 6             /*Right to left flag.*/
  253. #define smScriptJust 8                /*Justification flag.*/
  254. #define smScriptRedraw 10            /*Word redraw flag.*/
  255. #define smScriptSysFond 12            /*Preferred system font.*/
  256. #define smScriptAppFond 14            /*Preferred Application font.*/
  257. #define smScriptBundle 16            /*Beginning of dictionary verbs.*/
  258. #define smScriptNumber 16            /*Script itl0 id from dictionary.*/
  259. #define smScriptDate 18             /*Script itl1 id from dictionary.*/
  260. #define smScriptSort 20             /*Script itl2 id from dictionary.*/
  261. #define smScriptFlags 22            /*flags word.*/
  262. #define smScriptToken 24            /*Script itl3 id, from dictionary.*/
  263. #define smScriptRsvd3 26            /*reserved.*/
  264. #define smScriptLang 28             /*Current language for script.*/
  265. #define smScriptNumDate 30            /*Script Number/Date formats.*/
  266. #define smScriptKeys 32             /*Script KEYC id from dictionary.*/
  267. #define smScriptIcon 34             /*Script SICN id from dictionary.*/
  268. #define smScriptPrint 36            /*Script printer action routine.*/
  269. #define smScriptTrap 38             /*Trap entry pointer.*/
  270. #define smScriptCreator 40            /*Script file creator.*/
  271. #define smScriptFile 42             /*Script file name.*/
  272. #define smScriptName 44             /*Script name.*/
  273. #define smLastSVerb smScriptName    /*Last script verb.*/
  274.  
  275. /* Bits in the smScriptFlags word
  276. (bits above 7 are non-static) */
  277.  
  278. #define smsfIntellCP 0                /*script has intellegent cut & paste*/
  279. #define smsfSingByte 1                /*script has only single bytes*/
  280. #define smsfNatCase 2                /*native chars have upper & lower case*/
  281. #define smsfContext 3                /*contextual script (e.g. AIS-based)*/
  282. #define smsfNoForceFont 4            /*Will not force characters.*/
  283. #define smsfB0Digits 5                /*Has alternate digits at B0-B9.*/
  284. #define smsfForms 13                /*Uses contextual forms for letters.*/
  285. #define smsfLigatures 14            /*Uses contextual ligatures.*/
  286. #define smsfReverse 15                /*Reverses native text, right-left.*/
  287.  
  288. /* Bits in the smGenFlags long.
  289. First byte is set from itlc flags byte. */
  290.  
  291. #define smfShowIcon 31                /*Show icon even if only one script.*/
  292. #define smfDualCaret 30             /*Use dual caret for mixed direction text.*/
  293.  
  294. /* Roman script constants */
  295.  
  296. #define romanVers 0x0101            /*version number*/
  297. #define romanSysFond 0x3FFF         /*system font id number*/
  298. #define romanAppFond 3                /*application font id number.*/
  299. #define romanFlags 0x0007            /*roman settings*/
  300.  
  301. /* Script Manager font equates. */
  302.  
  303. #define smFondStart 0x4000            /*start from 16K.*/
  304. #define smFondEnd 0xC000            /*past end of range at 48K.*/
  305.  
  306. /* Character Set Extensions */
  307.  
  308. #define diaeresisUprY 0xD9
  309. #define fraction 0xDA
  310. #define intlCurrency 0xDB
  311. #define leftSingGuillemet 0xDC
  312. #define rightSingGuillemet 0xDD
  313. #define fiLigature 0xDE
  314. #define flLigature 0xDF
  315. #define dblDagger 0xE0
  316. #define centeredDot 0xE1
  317. #define baseSingQuote 0xE2
  318. #define baseDblQuote 0xE3
  319. #define perThousand 0xE4
  320. #define circumflexUprA 0xE5
  321. #define circumflexUprE 0xE6
  322. #define acuteUprA 0xE7
  323. #define diaeresisUprE 0xE8
  324. #define graveUprE 0xE9
  325. #define acuteUprI 0xEA
  326. #define circumflexUprI 0xEB
  327. #define diaeresisUprI 0xEC
  328. #define graveUprI 0xED
  329. #define acuteUprO 0xEE
  330. #define circumflexUprO 0xEF
  331. #define appleLogo 0xF0
  332. #define graveUprO 0xF1
  333. #define acuteUprU 0xF2
  334. #define circumflexUprU 0xF3
  335. #define graveUprU 0xF4
  336. #define dotlessLwrI 0xF5
  337. #define circumflex 0xF6
  338. #define tilde 0xF7
  339. #define macron 0xF8
  340. #define breve 0xF9
  341. #define overDot 0xFA
  342. #define ring 0xFB
  343. #define cedilla 0xFC
  344. #define doubleAcute 0xFD
  345. #define ogonek 0xFE
  346. #define hachek 0xFF
  347.  
  348. /* String2Date status values */
  349.  
  350. #define fatalDateTime 0x8000
  351. #define longDateFound 1
  352. #define leftOverChars 2
  353. #define sepNotIntlSep 4
  354. #define fieldOrderNotIntl 8
  355. #define extraneousStrings 16
  356. #define tooManySeps 32
  357. #define sepNotConsistent 64
  358. #define tokenErr 0x8100
  359. #define cantReadUtilities 0x8200
  360. #define dateTimeNotFound 0x8400
  361. #define dateTimeInvalid 0x8800
  362.  
  363. /* TokenType values */
  364.  
  365. #define tokenIntl 4                 /*the itl resource number of the tokenizer*/
  366. #define tokenEmpty -1
  367. #define tokenUnknown 0
  368. #define tokenWhite 1
  369. #define tokenLeftLit 2
  370. #define tokenRightLit 3
  371. #define tokenAlpha 4
  372. #define tokenNumeric 5
  373. #define tokenNewLine 6
  374. #define tokenLeftComment 7
  375. #define tokenRightComment 8
  376. #define tokenLiteral 9
  377. #define tokenEscape 10
  378. #define tokenAltNum 11
  379. #define tokenRealNum 12
  380. #define tokenAltReal 13
  381. #define tokenReserve1 14
  382. #define tokenReserve2 15
  383. #define tokenLeftParen 16
  384. #define tokenRightParen 17
  385. #define tokenLeftBracket 18
  386. #define tokenRightBracket 19
  387. #define tokenLeftCurly 20
  388. #define tokenRightCurly 21
  389. #define tokenLeftEnclose 22
  390. #define tokenRightEnclose 23
  391. #define tokenPlus 24
  392. #define tokenMinus 25
  393. #define tokenAsterisk 26
  394. #define tokenDivide 27
  395. #define tokenPlusMinus 28
  396. #define tokenSlash 29
  397. #define tokenBackSlash 30
  398. #define tokenLess 31
  399. #define tokenGreat 32
  400. #define tokenEqual 33
  401. #define tokenLessEqual2 34
  402. #define tokenLessEqual1 35
  403. #define tokenGreatEqual2 36
  404. #define tokenGreatEqual1 37
  405. #define token2Equal 38
  406. #define tokenColonEqual 39
  407. #define tokenNotEqual 40
  408. #define tokenLessGreat 41
  409. #define tokenExclamEqual 42
  410. #define tokenExclam 43
  411. #define tokenTilda 44
  412. #define tokenComma 45
  413. #define tokenPeriod 46
  414. #define tokenLeft2Quote 47
  415. #define tokenRight2Quote 48
  416. #define tokenLeft1Quote 49
  417. #define tokenRight1Quote 50
  418. #define token2Quote 51
  419. #define token1Quote 52
  420. #define tokenSemicolon 53
  421. #define tokenPercent 54
  422. #define tokenCarat 55
  423. #define tokenUnderline 56
  424. #define tokenAmpersand 57
  425. #define tokenAtSign 58
  426. #define tokenBar 59
  427. #define tokenQuestion 60
  428. #define tokenPi 61
  429. #define tokenRoot 62
  430. #define tokenSigma 63
  431. #define tokenIntegral 64
  432. #define tokenMicro 65
  433. #define tokenCapPi 66
  434. #define tokenInfinity 67
  435. #define tokenColon 68
  436. #define tokenHash 69
  437. #define tokenDollar 70
  438. #define tokenNoBreakSpace 71
  439. #define tokenFraction 72
  440. #define tokenIntlCurrency 73
  441. #define tokenLeftSingGuillemet 74
  442. #define tokenRightSingGuillemet 75
  443. #define tokenPerThousand 76
  444. #define tokenNil 127
  445. #define delimPad -2
  446.  
  447. /* the NumberParts indeces */
  448.  
  449. #define tokLeftQuote 1
  450. #define tokRightQuote 2
  451. #define tokLeadPlacer 3
  452. #define tokLeader 4
  453. #define tokNonLeader 5
  454. #define tokZeroLead 6
  455. #define tokPercent 7
  456. #define tokPlusSign 8
  457. #define tokMinusSign 9
  458. #define tokThousands 10
  459. #define tokSeparator 12             /*11 is a reserved field*/
  460. #define tokEscape 13
  461. #define tokDecPoint 14
  462. #define tokEPlus 15
  463. #define tokEMinus 16
  464. #define tokMaxSymbols 31
  465. #define curNumberPartsVersion 1     /*current version of NumberParts record*/
  466.  
  467. /*    Date equates */
  468.  
  469. #define smallDateBit 31             /*Restrict valid date/time to range of Time global*/
  470. #define togChar12HourBit 30         /*If toggling hour by char, accept hours 1..12 only*/
  471. #define togCharZCycleBit 29         /*Modifier for togChar12HourBit: accept hours 0..11 only*/
  472. #define togDelta12HourBit 28        /*If toggling hour up/down, restrict to 12-hour range (am/pm)*/
  473. #define genCdevRangeBit 27            /*Restrict date/time to range used by genl CDEV*/
  474. #define validDateFields -1
  475. #define maxDateField 10
  476. #define eraMask 0x0001
  477. #define yearMask 0x0002
  478. #define monthMask 0x0004
  479. #define dayMask 0x0008
  480. #define hourMask 0x0010
  481. #define minuteMask 0x0020
  482. #define secondMask 0x0040
  483. #define dayOfWeekMask 0x0080
  484. #define dayOfYearMask 0x0100
  485. #define weekOfYearMask 0x0200
  486. #define pmMask 0x0400
  487. #define dateStdMask 0x007F
  488. #define fVNumber 0                    /*first version of NumFormatString*/
  489.  
  490. /* Toggle results */
  491.  
  492. #define toggleUndefined 0
  493. #define toggleOK 1
  494. #define toggleBadField 2
  495. #define toggleBadDelta 3
  496. #define toggleBadChar 4
  497. #define toggleUnknown 5
  498. #define toggleBadNum 6
  499. #define toggleOutOfRange 7            /*synonym for toggleErr3*/
  500. #define toggleErr3 7
  501. #define toggleErr4 8
  502. #define toggleErr5 9
  503.  
  504. enum {tokenOK,tokenOverflow,stringOverflow,badDelim,badEnding,crash};
  505. typedef unsigned char TokenResults;
  506.  
  507. enum {eraField,yearField,monthField,dayField,hourField,minuteField,secondField,
  508.     dayOfWeekField,dayOfYearField,weekOfYearField,pmField,res1Field,res2Field,
  509.     res3Field};
  510. typedef unsigned char LongDateField;
  511.  
  512. enum {smBreakWord,smBreakChar,smBreakOverflow};
  513. typedef unsigned char StyledLineBreakCode;
  514.  
  515. enum {fPositive,fNegative,fZero};
  516. typedef unsigned char FormatClass;
  517.  
  518. enum {fFormatOK,fBestGuess,fOutOfSynch,fSpuriousChars,fMissingDelimiter,
  519.     fExtraDecimal,fMissingLiteral,fExtraExp,fFormatOverflow,fFormStrIsNAN,
  520.     fBadPartsTable,fExtraPercent,fExtraSeparator,fEmptyFormatString};
  521. typedef unsigned char FormatResultType;
  522.  
  523. typedef char CharByteTable[256];
  524. typedef short ToggleResults;
  525.  
  526.  
  527. struct BreakTable {
  528.     char charTypes[256];
  529.     short tripleLength;
  530.     short triples[1];
  531. };
  532.  
  533. typedef struct BreakTable BreakTable;
  534. typedef BreakTable *BreakTablePtr;
  535.  
  536. struct OffPair {
  537.     short offFirst;
  538.     short offSecond;
  539. };
  540.  
  541. typedef struct OffPair OffPair;
  542. typedef OffPair OffsetTable[3];
  543.  
  544.  
  545. struct ItlcRecord {
  546.     short itlcSystem;                /*default system script.*/
  547.     short itlcReserved;             /*reserved*/
  548.     char itlcFontForce;             /*default font force flag*/
  549.     char itlcIntlForce;             /*default intl force flag.*/
  550.     char itlcOldKybd;                /*old keyboard*/
  551.     char itlcFlags;                 /*general flags*/
  552.     short itlcIconOffset;            /*script icon offset*/
  553.     char itlcIconSide;                /*icon side*/
  554.     char itlcIconRsvd;                /*rsvd for other icon info*/
  555.     char itlcReserved2[36];         /*for future use*/
  556. };
  557.  
  558. typedef struct ItlcRecord ItlcRecord;
  559. struct ItlbRecord {
  560.     short itlbNumber;                /*ITL0 id number.*/
  561.     short itlbDate;                 /*ITL1 id number.*/
  562.     short itlbSort;                 /*ITL2 id number.*/
  563.     short itlbFlags;                /*Script flags*/
  564.     short itlbToken;                /*ITL4 id number.*/
  565.     short itlbReserved3;            /*reserved.*/
  566.     short itlbLang;                 /*cur language for script */
  567.     char itlbNumRep;                /*number representation code*/
  568.     char itlbDateRep;                /*date representation code */
  569.     short itlbKeys;                 /*KCHR id number.*/
  570.     short itlbIcon;                 /*SICN id number.*/
  571. };
  572.  
  573. typedef struct ItlbRecord ItlbRecord;
  574. struct MachineLocation {
  575.     Fract latitude;
  576.     Fract longitude;
  577.     union{
  578.         char dlsDelta;                /*signed byte; daylight savings delta*/
  579.         long gmtDelta;                /*must mask - see documentation*/
  580.         }gmtFlags;
  581. };
  582.  
  583. typedef struct MachineLocation MachineLocation;
  584. typedef short String2DateStatus;
  585. typedef short TokenType;
  586. typedef TokenType DelimType[2];
  587. typedef TokenType CommentType[4];
  588.  
  589. struct TokenRec {
  590.     TokenType theToken;
  591.     Ptr position;                    /*pointer into original Source*/
  592.     long length;                    /*length of text in original source*/
  593.     StringPtr stringPosition;        /*Pascal/C string copy of identifier*/
  594. };
  595.  
  596. typedef struct TokenRec TokenRec;
  597. typedef TokenRec *TokenRecPtr;
  598.  
  599. struct TokenBlock {
  600.     Ptr source;                     /*pointer to stream of characters*/
  601.     long sourceLength;                /*length of source stream*/
  602.     Ptr tokenList;                    /*pointer to array of tokens*/
  603.     long tokenLength;                /*maximum length of TokenList*/
  604.     long tokenCount;                /*number tokens generated by tokenizer*/
  605.     Ptr stringList;                 /*pointer to stream of identifiers*/
  606.     long stringLength;                /*length of string list*/
  607.     long stringCount;                /*number of bytes currently used*/
  608.     Boolean doString;                /*make strings & put into StringLIst*/
  609.     Boolean doAppend;                /*append to TokenList rather than replace*/
  610.     Boolean doAlphanumeric;         /*identifiers may include numeric*/
  611.     Boolean doNest;                 /*do comments nest?*/
  612.     TokenType leftDelims[2];
  613.     TokenType rightDelims[2];
  614.     TokenType leftComment[4];
  615.     TokenType rightComment[4];
  616.     TokenType escapeCode;            /*escape symbol code*/
  617.     TokenType decimalCode;
  618.     Handle itlResource;             /*ptr to itl4 resource of current script*/
  619.     long reserved[8];                /*must be zero!*/
  620. };
  621.  
  622. typedef struct TokenBlock TokenBlock;
  623. typedef TokenBlock *TokenBlockPtr;
  624.  
  625. struct UntokenTable {
  626.     short len;
  627.     short lastToken;
  628.     short index[256];                /*index table; last = lastToken*/
  629. };
  630.  
  631. typedef struct UntokenTable UntokenTable;
  632. typedef UntokenTable *UntokenTablePtr, **UntokenTableHandle;
  633.  
  634. struct DateCacheRecord {
  635.     short hidden[256];                /*only for temporary use*/
  636. };
  637.  
  638. typedef struct DateCacheRecord DateCacheRecord;
  639. typedef DateCacheRecord *DateCachePtr;
  640.  
  641. typedef comp LongDateTime;
  642.  
  643. union LongDateCvt {
  644.     comp c;
  645.     struct {
  646.         long lHigh;
  647.         long lLow;
  648.         } hl;
  649. };
  650.  
  651. typedef union LongDateCvt LongDateCvt;
  652.  
  653. union LongDateRec {
  654.     struct {
  655.         short era;
  656.         short year;
  657.         short month;
  658.         short day;
  659.         short hour;
  660.         short minute;
  661.         short second;
  662.         short dayOfWeek;
  663.         short dayOfYear;
  664.         short weekOfYear;
  665.         short pm;
  666.         short res1;
  667.         short res2;
  668.         short res3;
  669.         } ld;
  670.     short list[14];                 /*Index by LongDateField!*/
  671.     struct {
  672.         short eraAlt;
  673.         DateTimeRec oldDate;
  674.         } od;
  675. };
  676.  
  677. typedef union LongDateRec LongDateRec;
  678.  
  679. typedef char DateDelta;
  680.  
  681. struct TogglePB {
  682.     long togFlags;                    /*caller normally sets low word to dateStdMask=$7F*/
  683.     ResType amChars;                /*from intl0*/
  684.     ResType pmChars;                /*from intl0*/
  685.     long reserved[4];
  686. };
  687.  
  688. typedef struct TogglePB TogglePB;
  689. typedef short FormatOrder[1];
  690. typedef FormatOrder *FormatOrderPtr;
  691. typedef short FormatStatus;
  692.  
  693. union WideChar {
  694.     char a[2];                        /*0 is the high order character*/
  695.     short b;
  696. };
  697.  
  698. typedef union WideChar WideChar;
  699.  
  700. struct WideCharArr {
  701.     short size;
  702.     WideChar data[10];
  703. };
  704.  
  705. typedef struct WideCharArr WideCharArr;
  706. struct NumFormatString {
  707.     char fLength;
  708.     char fVersion;
  709.     char data[254];                 /*private data*/
  710. };
  711.  
  712. typedef struct NumFormatString NumFormatString;
  713. struct Itl4Rec {
  714.     short flags;
  715.     long resourceType;
  716.     short resourceNum;
  717.     short version;
  718.     long resHeader1;
  719.     long resHeader2;
  720.     short numTables;                /*one-based*/
  721.     long mapOffset;                 /*offsets are from record start*/
  722.     long strOffset;
  723.     long fetchOffset;
  724.     long unTokenOffset;
  725.     long defPartsOffset;
  726.     long resOffset6;
  727.     long resOffset7;
  728.     long resOffset8;
  729. };
  730.  
  731. typedef struct Itl4Rec Itl4Rec;
  732. typedef Itl4Rec *Itl4Ptr, **Itl4Handle;
  733.  
  734. struct NumberParts {
  735.     short version;
  736.     WideChar data[31];                /*index by [tokLeftQuote..tokMaxSymbols]*/
  737.     WideCharArr pePlus;
  738.     WideCharArr peMinus;
  739.     WideCharArr peMinusPlus;
  740.     WideCharArr altNumTable;
  741.     char reserved[20];
  742. };
  743.  
  744. typedef struct NumberParts NumberParts;
  745. typedef NumberParts *NumberPartsPtr;
  746.  
  747. struct FVector {
  748.     short start;
  749.     short length;
  750. };
  751.  
  752. typedef struct FVector FVector;
  753. typedef FVector TripleInt[3];        /* index by [fPositive..fZero] */
  754.  
  755. struct ScriptRunStatus {
  756.     short script;
  757.     short variant;
  758. };
  759.  
  760. typedef struct ScriptRunStatus ScriptRunStatus;
  761. #ifdef __cplusplus
  762. extern "C" {
  763. #endif
  764. pascal short FontScript(void)
  765.     = {0x2F3C,0x8200,0x0000,0xA8B5};
  766. pascal short IntlScript(void)
  767.     = {0x2F3C,0x8200,0x0002,0xA8B5};
  768. pascal void KeyScript(short code)
  769.     = {0x2F3C,0x8002,0x0004,0xA8B5};
  770. pascal short Font2Script(short fontNumber)
  771.     = {0x2F3C,0x8202,0x0006,0xA8B5};
  772. pascal long GetEnvirons(short verb)
  773.     = {0x2F3C,0x8402,0x0008,0xA8B5};
  774. pascal OSErr SetEnvirons(short verb,long param)
  775.     = {0x2F3C,0x8206,0x000A,0xA8B5};
  776. pascal long GetScript(short script,short verb)
  777.     = {0x2F3C,0x8404,0x000C,0xA8B5};
  778. pascal OSErr SetScript(short script,short verb,long param)
  779.     = {0x2F3C,0x8208,0x000E,0xA8B5};
  780. pascal short CharByte(Ptr textBuf,short textOffset)
  781.     = {0x2F3C,0x8206,0x0010,0xA8B5};
  782. pascal short CharType(Ptr textBuf,short textOffset)
  783.     = {0x2F3C,0x8206,0x0012,0xA8B5};
  784. pascal short Pixel2Char(Ptr textBuf,short textLen,short slop,short pixelWidth,
  785.     Boolean *leadingEdge)
  786.     = {0x2F3C,0x820E,0x0014,0xA8B5};
  787. pascal short Char2Pixel(Ptr textBuf,short textLen,short slop,short offset,
  788.     short direction)
  789.     = {0x2F3C,0x820C,0x0016,0xA8B5};
  790. pascal OSErr Transliterate(Handle srcHandle,Handle dstHandle,short target,
  791.     long srcMask)
  792.     = {0x2F3C,0x820E,0x0018,0xA8B5};
  793. pascal void FindWord(Ptr textPtr,short textLength,short offset,Boolean leadingEdge,
  794.     BreakTablePtr breaks,OffsetTable offsets)
  795.     = {0x2F3C,0x8012,0x001A,0xA8B5};
  796. pascal void HiliteText(Ptr textPtr,short textLength,short firstOffset,short secondOffset,
  797.     OffsetTable offsets)
  798.     = {0x2F3C,0x800E,0x001C,0xA8B5};
  799. pascal void DrawJust(Ptr textPtr,short textLength,short slop)
  800.     = {0x2F3C,0x8008,0x001E,0xA8B5};
  801. pascal void MeasureJust(Ptr textPtr,short textLength,short slop,Ptr charLocs)
  802.     = {0x2F3C,0x800C,0x0020,0xA8B5};
  803. pascal Boolean ParseTable(CharByteTable *table)
  804.     = {0x2F3C,0x8204,0x0022,0xA8B5};
  805. pascal short GetDefFontSize(void)
  806.     = {0x3EB8,0x0BA8,0x6604,0x3EBC,0x000C}; 
  807. pascal short GetSysFont(void)
  808.     = {0x3EB8,0x0BA6};
  809. pascal short GetAppFont(void)
  810.     = {0x3EB8,0x0984};
  811. pascal short GetMBarHeight(void)
  812.     = {0x3EB8,0x0BAA};
  813. pascal short GetSysJust(void)
  814.     = {0x3EB8,0x0BAC};
  815. pascal void SetSysJust(short newJust)
  816.     = {0x31DF,0x0BAC};
  817. pascal void ReadLocation(MachineLocation *loc)
  818.     = {0x205F,0x203C,0x000C,0x00E4,0xA051}; 
  819. pascal void WriteLocation(const MachineLocation *loc)
  820.     = {0x205F,0x203C,0x000C,0x00E4,0xA052}; 
  821. pascal void UprText(Ptr textPtr,short len)
  822.     = {0x301F,0x205F,0xA054};
  823. pascal void LwrText(Ptr textPtr,short len)
  824.     = {0x301F,0x205F,0xA056};
  825. pascal StyledLineBreakCode StyledLineBreak(Ptr textPtr,long textLen,long textStart,
  826.     long textEnd,long flags,Fixed *textWidth,long *textOffset)
  827.     = {0x2F3C,0x821C,0xFFFE,0xA8B5};
  828. pascal void GetFormatOrder(FormatOrderPtr ordering,short firstFormat,short lastFormat,
  829.     Boolean lineRight,Ptr rlDirProc,Ptr dirParam)
  830.     = {0x2F3C,0x8012,0xFFFC,0xA8B5};
  831. pascal TokenResults IntlTokenize(TokenBlockPtr tokenParam)
  832.     = {0x2F3C,0x8204,0xFFFA,0xA8B5};
  833. pascal OSErr InitDateCache(DateCachePtr theCache)
  834.     = {0x2F3C,0x8204,0xFFF8,0xA8B5};
  835. pascal String2DateStatus String2Date(Ptr textPtr,long textLen,DateCachePtr theCache,
  836.     long *lengthUsed,LongDateRec *dateTime)
  837.     = {0x2F3C,0x8214,0xFFF6,0xA8B5};
  838. pascal String2DateStatus String2Time(Ptr textPtr,long textLen,DateCachePtr theCache,
  839.     long *lengthUsed,LongDateRec *dateTime)
  840.     = {0x2F3C,0x8214,0xFFF4,0xA8B5};
  841. pascal void LongDate2Secs(const LongDateRec *lDate,LongDateTime *lSecs)
  842.     = {0x2F3C,0x8008,0xFFF2,0xA8B5};
  843. pascal void LongSecs2Date(LongDateTime *lSecs,LongDateRec *lDate)
  844.     = {0x2F3C,0x8008,0xFFF0,0xA8B5};
  845. pascal ToggleResults ToggleDate(LongDateTime *lSecs,LongDateField field,
  846.     DateDelta delta,short ch,const TogglePB *params)
  847.     = {0x2F3C,0x820E,0xFFEE,0xA8B5};
  848. pascal FormatStatus Str2Format(const Str255 inString,const NumberParts *partsTable,
  849.     NumFormatString *outString)
  850.     = {0x2F3C,0x820C,0xFFEC,0xA8B5};
  851. pascal FormatStatus Format2Str(const NumFormatString *myCanonical,const NumberParts *partsTable,
  852.     Str255 outString,TripleInt *positions)
  853.     = {0x2F3C,0x8210,0xFFEA,0xA8B5};
  854. pascal FormatStatus FormatX2Str(extended x,const NumFormatString *myCanonical,
  855.     const NumberParts *partsTable,Str255 outString)
  856.     = {0x2F3C,0x8210,0xFFE8,0xA8B5};
  857. pascal FormatStatus FormatStr2X(const Str255 source,const NumFormatString *myCanonical,
  858.     const NumberParts *partsTable,extended *x)
  859.     = {0x2F3C,0x8210,0xFFE6,0xA8B5};
  860. pascal Fixed PortionText(Ptr textPtr,long textLen)
  861.     = {0x2F3C,0x8408,0x0024,0xA8B5};
  862. pascal struct ScriptRunStatus FindScriptRun(Ptr textPtr,long textLen,long *lenUsed)
  863.     = {0x2F3C,0x820C,0x0026,0xA8B5};
  864. pascal long VisibleLength(Ptr textPtr,long textLen)
  865.     = {0x2F3C,0x8408,0x0028,0xA8B5};
  866. pascal short ValidDate(LongDateRec *vDate,long flags,LongDateTime *newSecs)
  867.     = {0x2F3C,0x8204,0xFFE4,0xA8B5};
  868. pascal void IULDateString(LongDateTime *dateTime,DateForm longFlag,Str255 result,
  869.     Handle intlParam)
  870.     = {0x3F3C,0x0014,0xA9ED};
  871. pascal void IULTimeString(LongDateTime *dateTime,Boolean wantSeconds,Str255 result,
  872.     Handle intlParam)
  873.     = {0x3F3C,0x0016,0xA9ED};
  874. #ifdef __cplusplus
  875. }
  876. #endif
  877.  
  878. #endif
  879.